package com.wtgroup.demo.mianshi.算法.排序;

public class BubbleSort {
    /*
     * 冒泡的真谛在于"冒泡",
     * 为了更形象, 想象下, 头部在顶, 尾部在底.
     * 从低部开始遍历, 相邻的比较, 比前面的小, 则交换. (往上冒了一层).
     * 遍历结束时, 最小元素自然"冒泡"到顶部了.
     *
     * 实操时, 一般从前往后, 让大的往后"冒". 本质没有区别.
     *
     */

    public static void main(String[] args) {
        int[] arr = new int[] { 2, 3, 1, 5, 6, 5, 29 };

        m(arr);
        SortUtil.print(arr);
    }

    public static void m(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n; i++) {
            boolean hasSwap = false;
            for (int j = 0; j < n-i-1; j++) {
                if(arr[j] > arr[j+1]) {
                    SortUtil.swap(arr, j, j+1);
                    hasSwap = true;
                }
            }
            if(!hasSwap) {
                // 没发生交换=>已经有序
                // System.out.println("没发生交换=>已经有序. i=" + i);;
                return;
            }
        }
    }

}
